#ifndef LONLATUTIL_H
#define LONLATUTIL_H

#pragma once

#include <QString>
#include <QPair>

namespace ns_yht
{

    class /*COMMONUTILS_EXPORT*/ LonLatUtil
    {
    public:
        LonLatUtil();
        ~LonLatUtil();

        /**
         * @brief 把实数格式的经纬度转换为度分秒格式
         *
         * @param value
         * @param degree
         * @param minute
         * @param second
         */
        static void toDMS(double value, int &degree, int &minute, double &second);

        /**
         * @brief 把实数格式的经纬度转换为度分格式
         *
         * @param value
         * @param degree
         * @param minute
         */
        static void toDM(double value, int &degree, double &minute);

        /**
         * @brief 把度分秒格式的经纬度转换为实数
         *
         * @param degree
         * @param minute
         * @param second
         * @return double
         */
        static double toReal(int degree, int minute, double second);

        /**
         * @brief 把度分格式的经纬度转换为实数
         *
         * @param degree
         * @param minute
         * @return double
         */
        static double toReal(int degree, double minute);

        /**
         * @brief 将形如123°45'56.78"格式的经纬度转换为实数
         *
         * @param scoor
         * @return double
         */
        static double toReal(const QString &scoor);

        /**
         * @brief 转化为格式：  123°45'56.78"
         *
         * @param value
         * @return QString
         */
        static QString toString_sn(double value, bool isLon);

        /**
         * @brief 转化为格式：  123度45分67.89秒
         *
         * @param value
         * @return QString
         */
        static QString toString_cn(double value, bool isLon);

        static bool isValid(qreal lat, qreal lon);
        static bool isValid(const QPair<double, double> &coor);

        static QString toString(double lat, double lon);
        static QString toString(const QPair<double, double> &coor);
        static void fromString(const QString &scoor, double &lat, double &lon);
        static QPair<double, double> fromString(const QString &scoor);

        static double getLonlat(const QString lonlatString, const int typeInt);
        static double getLon(const QByteArray &lonString, const QByteArray &ewIndicator);
        static double getLat(const QByteArray &latString, const QByteArray &nsIndicator);

    private:
    };

} // namespace ns_yht

#endif